package nsu.edu.zsq.dao;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import nsu.edu.zsq.bean.StuScore;
import nsu.edu.zsq.bean.StuScoreExample;
import nsu.edu.zsq.param.StuScoreParam;

public interface StuScoreMapper {
    /**
     *
     */
    long countByExample(StuScoreExample example);

    /**
     *
     */
    int deleteByExample(StuScoreExample example);

    /**
     *
     */
    int deleteByPrimaryKey(Integer id);

    /**
     *
     */
    int insert(StuScore record);

    /**
     *
     */
    int insertSelective(StuScore record);

    /**
     *
     */
    List<StuScore> selectByExample(StuScoreExample example);

    /**
     *
     */
    StuScore selectByPrimaryKey(Integer id);

    /**
     *
     */
    int updateByExampleSelective(@Param("record") StuScore record, @Param("example") StuScoreExample example);

    /**
     *
     */
    int updateByExample(@Param("record") StuScore record, @Param("example") StuScoreExample example);

    /**
     *
     */
    int updateByPrimaryKeySelective(StuScore record);

    /**
     *
     */
    int updateByPrimaryKey(StuScore record);
    
    /**
     * 查找班级所有学生的课程成绩信息
     * @param classId 班级id
     * @param courseNo 课程代码
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listStuScore(@Param("classId")int classId, @Param("courseNo")String courseNo);

    /**
     * 通过教师课程id查找该课程下的所有学生成绩信息
     * @param tchCourseId 教师课程id
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listStuScoreByTchCourseId(@Param("tchCourseId")int tchCourseId);

    /**
     * 通过教师编号获取教师所授课程下，所有需要补考的学生成绩信息（其中的sort值是resit_score值）
     * @param teacherNo 教师编号
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listResitStuScore(String teacherNo);

    /**
     * 通过教师编号获取教师所授课程下，所有需要重修的学生成绩信息（其中的sort值是retake_score值）
     * @param teacherNo 教师编号
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listRetakeStuScore(String teacherNo);

    /**
     * 获取教师授课课程中需要重修的课程（即教授学生中成绩有重修标识）
     * @param teacherNo 教师编号
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listRetakeCourse(String teacherNo);

    /**
     * 获取重修课程的学生
     * @param tchCourseId 教师课程id
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listRetakeStudent(int tchCourseId);

    /**
     * 获取该学生所有课程的成绩信息（必修+选修）
     * @param stuNo 学号
     * @param classId 班级id
     * @return List<StuScoreParam>
     */
    List<StuScoreParam> listAllCourseScore(@Param("stuNo")String stuNo, @Param("classId")Integer classId);

    /**
     * 获取该学生的补考课程信息，带补考成绩信息
     * @param stuNo 学号
     * @return List<StuScoreParam>
     */
    List<StuScore> listResitCourseScore(String stuNo);

    /**
     * 获取该学生的重修课程信息，带重修成绩信息
     * @param stuNo 学号
     * @return List<StuScore>
     */
    List<StuScore> listRetakeCourseScore(String stuNo);

    /**
     * 获取所有学生需要补考的必修课程，带有专业代码信息
     * @return List<HashMap<String, String>>
     */
    List<HashMap<String, String>> listStuScoreWithMajorNo();
}